<template>
  <div>
    <div class="gva-search-box">
      <el-form :inline="true" :model="searchInfo" class="demo-form-inline" @keyup.enter="onSubmit">
        <el-form-item label="创建时间">
          <el-date-picker v-model="searchInfo.startCreatedAt" type="datetime" placeholder="开始时间"></el-date-picker>
          —
          <el-date-picker v-model="searchInfo.endCreatedAt" type="datetime" placeholder="结束时间"></el-date-picker>
        </el-form-item>
        <el-form-item>
          <el-button type="primary" icon="search" @click="onSubmit">查询</el-button>
          <el-button icon="refresh" @click="onReset">重置</el-button>
        </el-form-item>
      </el-form>
    </div>
    <div class="gva-table-box">
      <div class="gva-btn-list">
        <el-button type="primary" icon="plus" @click="openDialog">新增</el-button>
        <el-popover v-model:visible="deleteVisible" placement="top" width="160">
          <p>确定要删除吗？</p>
          <div style="text-align: right; margin-top: 8px;">
            <el-button type="primary" link @click="deleteVisible = false">取消</el-button>
            <el-button type="primary" @click="deleteSelectedRow">确定</el-button>
          </div>
          <template #reference>
            <el-button icon="delete" style="margin-left: 10px;" :disabled="!multipleSelection.length" @click="deleteVisible = true">删除</el-button>
          </template>
        </el-popover>
      </div>

      <el-table
          ref="multipleTable"
          style="width: 100%"
          border
          :cell-style="{padding:'0px'}"
          :header-cell-style="{background:'#a3c6d2',color:'#849ba1',padding:'0px'}"
          tooltip-effect="dark"
          :data="tableData"
          row-key="ID"
          @selection-change="handleSelectionChange"
      >
        <el-table-column align="left" label="数据库类型" prop="type" :show-overflow-tooltip="true"/>
        <el-table-column align="left" label="数据库ip" prop="ip" :show-overflow-tooltip="true"/>
        <el-table-column align="left" label="数据库端口" prop="port" :show-overflow-tooltip="true"/>
        <el-table-column align="left" label="数据库用户名" prop="user" :show-overflow-tooltip="true"/>
        <el-table-column align="left" label="数据库密码" prop="password" :show-overflow-tooltip="true"/>
        <el-table-column align="left" label="数据库模式" prop="schema" :show-overflow-tooltip="true"/>
        <el-table-column align="left" label="url参数" prop="parm" :show-overflow-tooltip="true"/>
        <el-table-column align="left" label="唯一识别码" prop="ipPortUserSchema" :show-overflow-tooltip="true"/>
        <el-table-column align="left" label="数据库状态" prop="state" :show-overflow-tooltip="true"/>
        <el-table-column align="left" label="数据主题" prop="topic" :show-overflow-tooltip="true"/>
        <el-table-column align="left" label="数据库版本" prop="version" :show-overflow-tooltip="true"/>
        <el-table-column align="left" label="操作系统" prop="os" :show-overflow-tooltip="true"/>
        <el-table-column align="left" label="操作"  width="150" fixed="right">
          <template #default="scope">
            <el-button type="primary" link icon="edit" class="table-button" @click="updateDmSchemaFunc(scope.row)">变更</el-button>
            <el-button type="primary" link icon="delete" @click="deleteRow(scope.row)">删除</el-button>
          </template>
        </el-table-column>
      </el-table>
      <div class="gva-pagination">
        <el-pagination
            layout="total, sizes, prev, pager, next, jumper"
            :current-page="page"
            :page-size="pageSize"
            :page-sizes="[10, 30, 50, 100]"
            :total="total"
            @current-change="handleCurrentChange"
            @size-change="handleSizeChange"
        />
      </div>
    </div>
    <el-dialog v-model="dialogFormVisible" :before-close="closeDialog" title="弹窗操作">
      <el-form :model="formData" ref="elFormRef" label-position="right" :rules="rule" label-width="130px">
        <el-form-item label="数据库类型:" prop="type">
          <el-input v-model="formData.type" placeholder="请输入"/>
        </el-form-item>
        <el-form-item label="数据库ip:" prop="ip">
          <el-input v-model="formData.ip" placeholder="请输入"/>
        </el-form-item>
        <el-form-item label="数据库端口:" prop="port">
          <el-input v-model="formData.port" placeholder="请输入"/>
        </el-form-item>
        <el-form-item label="数据库用户名:" prop="user">
          <el-input v-model="formData.user" placeholder="请输入"/>
        </el-form-item>
        <el-form-item label="数据库密码:" prop="password">
          <el-input v-model="formData.password" placeholder="请输入"/>
        </el-form-item>
        <el-form-item label="数据库模式:" prop="schema">
          <el-input v-model="formData.schema" placeholder="请输入"/>
        </el-form-item>
        <el-form-item label="url参数:" prop="parm">
          <el-input v-model="formData.parm" placeholder="请输入"/>
        </el-form-item>
        <el-form-item label="IpPortUserSchema:" prop="ipPortUserSchema">
          <el-input v-model="formData.ipPortUserSchema" placeholder="请输入"/>
        </el-form-item>
        <el-form-item label="数据库状态:" prop="state">
          <el-input v-model.number="formData.state" placeholder="请输入"/>
        </el-form-item>
        <el-form-item label="数据库主题:" prop="topic">
          <el-input v-model="formData.topic" placeholder="请输入"/>
        </el-form-item>
        <el-form-item label="数据库版本:" prop="version">
          <el-input v-model="formData.version" placeholder="请输入"/>
        </el-form-item>
        <el-form-item label="操作系统:" prop="os">
          <el-input v-model="formData.os" placeholder="请输入"/>
        </el-form-item>
        <el-form-item label="备注:" prop="remarks">
          <el-input v-model="formData.remarks" placeholder="请输入"/>
        </el-form-item>
      </el-form>
      <template #footer>
        <div class="dialog-footer">
          <el-button @click="closeDialog">取 消</el-button>
          <el-button type="primary" @click="enterDialog">确 定</el-button>
        </div>
      </template>
    </el-dialog>
  </div>
</template>

<script>
export default {
  name: 'DmSchema'
}
</script>

<script setup>
import {
  createDmSchema,
  deleteDmSchema,
  deleteDmSchemaByIds,
  updateDmSchema,
  findDmSchema,
  getDmSchemaList,
  getAllDmSchemas
} from '@/api/dmSchema'

import {getDictFunc, formatDate, formatBoolean, filterDict} from '@/utils/format'
import {ElMessage, ElMessageBox} from 'element-plus'
import {ref, reactive} from 'vue'

const formData = ref({
  type: '',
  ip: '',
  port: '',
  user: '',
  password: '',
  schema: '',
  parm: '',
  ipPortUserSchema: '',
  state: 0,
  topic: '',
  version: '',
  os: '',
  remarks: '',
})

const rule = reactive({})

const elFormRef = ref()


const page = ref(1)
const total = ref(0)
const pageSize = ref(10)
const tableData = ref([])
const searchInfo = ref({})

const onReset = () => {
  searchInfo.value = {}
  getTableData()
}

const onSubmit = () => {
  page.value = 1
  pageSize.value = 10
  getTableData()
}

const handleSizeChange = (val) => {
  pageSize.value = val
  getTableData()
}

const handleCurrentChange = (val) => {
  page.value = val
  getTableData()
}

const getTableData = async () => {
  const table = await getDmSchemaList({page: page.value, pageSize: pageSize.value, ...searchInfo.value})
  if (table.code === 0) {
    tableData.value = table.data.list
    total.value = table.data.total
    page.value = table.data.page
    pageSize.value = table.data.pageSize
  }
}

getTableData()


const setOptions = async () => {
}

setOptions()


const multipleSelection = ref([])
const handleSelectionChange = (val) => {
  multipleSelection.value = val
}

const deleteRow = (row) => {
  ElMessageBox.confirm('确定要删除吗?', '提示', {
    confirmButtonText: '确定',
    cancelButtonText: '取消',
    type: 'warning'
  }).then(() => {
    deleteDmSchemaFunc(row)
  })
}


const deleteVisible = ref(false)

const deleteSelectedRow = async () => {
  const ids = []
  if (multipleSelection.value.length === 0) {
    ElMessage({
      type: 'warning',
      message: '请选择要删除的数据'
    })
    return
  }
  multipleSelection.value &&
  multipleSelection.value.map(item => {
    ids.push(item.ID)
  })
  const res = await deleteDmSchemaByIds({ids})
  if (res.code === 0) {
    ElMessage({
      type: 'success',
      message: '删除成功'
    })
    if (tableData.value.length === ids.length && page.value > 1) {
      page.value--
    }
    deleteVisible.value = false
    getTableData()
  }
}

const type = ref('')

const updateDmSchemaFunc = async (row) => {
  const res = await findDmSchema({ID: row.ID})
  type.value = 'update'
  if (res.code === 0) {
    formData.value = res.data.redmSchema
    dialogFormVisible.value = true
  }
}


const deleteDmSchemaFunc = async (row) => {
  const res = await deleteDmSchema({ID: row.ID})
  if (res.code === 0) {
    ElMessage({
      type: 'success',
      message: '删除成功'
    })
    if (tableData.value.length === 1 && page.value > 1) {
      page.value--
    }
    getTableData()
  }
}

const dialogFormVisible = ref(false)

const openDialog = () => {
  type.value = 'create'
  dialogFormVisible.value = true
}

const closeDialog = () => {
  dialogFormVisible.value = false
  formData.value = {
    type: '',
    ip: '',
    port: '',
    user: '',
    password: '',
    schema: '',
    parm: '',
    ipPortUserSchema: '',
    state: 0,
    topic: '',
    version: '',
    os: '',
    remarks: '',
  }
}
const enterDialog = async () => {
  elFormRef.value?.validate(async (valid) => {
    if (!valid) return
    let res
    switch (type.value) {
      case 'create':
        res = await createDmSchema(formData.value)
        break
      case 'update':
        res = await updateDmSchema(formData.value)
        break
      default:
        res = await createDmSchema(formData.value)
        break
    }
    if (res.code === 0) {
      ElMessage({
        type: 'success',
        message: '创建/更改成功'
      })
      closeDialog()
      getTableData()
    }
  })
}
</script>

<style>
</style>
